package myself.study.network.udp.demo;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import org.junit.Test;


/**
* @Name: SendUdpDemo
* @Description: UDP协议客户端发送数据测试类
* UDP协议-API：DatagramSocket类、DatagramPacket类
* 说明：
* 	DatagramSocket类表示用来【发送-客户端】和【接收-服务端】数据报包的套接字。 
* 		DatagramSocket()  构造数据报套接字并将其绑定到本地主机上任何可用的端口。
* 		public void send(DatagramPacket p) 从此套接字发送数据报包。DatagramPacket 包含的信息指示：将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。 
* 		public void close()	关闭此数据报套接字。 
* 		public boolean isClosed() 返回是否关闭了套接字。 
* 	DatagramPacket类表示UDP数据报包。 
* 		DatagramPacket(byte[] buf, int length, InetAddress address, int port) 	构造数据报包，用来将长度为 length 的包发送到指定主机上的指定端口号。
* 步骤：
* 	1、创建发送端Socket对象；
* 	2、创建数据，并把数据打包；
* 	3、调用Socket对象的发送方法，发送数据包；
* 	4、释放资源
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-11 下午10:41:45 
* @Version: V1.0
 */
public class UdpClientDemo {
	
	@Test
	public void sendUDPSocket() throws IOException {
		//1、创建发送端Socket对象
		DatagramSocket client = new DatagramSocket() ;
		//2、创建数据，并把数据打包
		//DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
		//将要发送的数据
		byte[] buf = "hello,udp,我来了".getBytes() ;
		//将要发送的数据的长度
		int length = buf.length ;
		//远程主机的 IP
		InetAddress address = InetAddress.getByName("127.0.0.1") ;
		//远程主机的端口号，自定义端口一般定义为1万以上
		int port = 12345 ;
		DatagramPacket packet = new DatagramPacket(buf, length, address, port) ;
		//3、调用Socket对象的发送方法，发送数据包
		//public void send(DatagramPacket p)
		//从此套接字发送数据报包。DatagramPacket 包含的信息指示：将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。 
		client.send(packet) ;
		//4、释放资源
		//public void close()	关闭此数据报套接字。 
		//public boolean isClosed()	返回是否关闭了套接字。
		client.close() ;
	}

}
